package com.aaa.jvmtest.methodarea;

import java.io.*;

/**
 * StringTable调优1  添加参数：-XX:StringTableSize=多少个
 * 底层是Hash表，hash表的性能跟它桶(数组个数)的个数有关
 * 如果桶的个数比较多，相对元素比较分散，发生hash碰撞的几率减少，查询速度会快
 * 如果痛的个数比较少，发生hash碰撞的几率会增加，链表变长，查询速度会收到影响
 *
 * @author Tu
 * @date 2022/6/10 16:32
 */
public class StringTables_optimize1 {

    /**
     * 默认桶个数为：60013个         消耗时间：44毫秒
     * 设置参数桶个数为：200000个   消耗时间：31秒
     * 设置参数桶个数为：1009个(最小)   消耗时间：50秒
     */
    public static void main(String[] args) throws IOException {
        //缓冲流 + 输入流
        //try 可自动close
        try (BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream("D:\\QQ接收、学习\\个人事务\\入党\\党员发展\\思想汇报范文---总.docx"), "utf-8"))) {
            String line = null;
            //记录当前时间(纳秒)
            Long start = System.nanoTime();
            while (true) {
                //读取一行文本
                line = bufferedReader.readLine();
                if (line == null) {
                    break;
                }
                //入池  垃圾回收只在内存紧张时才会触发
                line.intern();
            }
            //打印花费时间 (/10的六次方得出毫秒)
            System.out.println("cost:" + (System.nanoTime() - start) / 1000000);
        }
    }

}
